Skip Headers

Oracle® Database PL/SQL User's Guide and Reference 10g Release 2 (10.2) Part Number B14261-01 |
Home | Book List | Contents | Index | Master Index | Feedback

Previous | Next
| View PDF

# SERIALLY_REUSABLE Pragma

The pragma `SERIALLY_REUSABLE` indicates that the package state is needed only for the duration of one call to the server. An example could be an OCI call to the database or a stored procedure call through a database link. After this call, the storage for the package variables can be reused, reducing the memory overhead for long-running sessions. For more information, see Oracle Database Application Developer's Guide - Fundamentals.

Syntax

pragma serially_resuable ::=

Description of the illustration serially_reusable_pragma.gif

Keyword and Parameter Description

PRAGMA

Signifies that the statement is a pragma (compiler directive). Pragmas are processed at compile time, not at run time. They do not affect the meaning of a program; they simply convey information to the compiler.

Usage Notes

This pragma is appropriate for packages that declare large temporary work areas that are used once and not needed during subsequent database calls in the same session.

You can mark a bodiless package as serially reusable. If a package has a spec and body, you must mark both. You cannot mark only the body.

The global memory for serially reusable packages is pooled in the System Global Area (SGA), not allocated to individual users in the User Global Area (UGA). That way, the package work area can be reused. When the call to the server ends, the memory is returned to the pool. Each time the package is reused, its public variables are initialized to their default values or to `NULL`.

Serially reusable packages cannot be accessed from database triggers or other PL/SQL subprograms that are called from SQL statements. If you try, Oracle generates an error.

Examples

Example 13-5 creates a serially reusable package.

Example 13-5 Creating a Serially Reusable Package

    CREATE PACKAGE pkg1 IS
       PRAGMA SERIALLY_REUSABLE;
       num NUMBER := 0;
       PROCEDURE init_pkg_state(n NUMBER);
       PROCEDURE print_pkg_state;
    END pkg1;
    /
    CREATE PACKAGE BODY pkg1 IS
       PRAGMA SERIALLY_REUSABLE;
       PROCEDURE init_pkg_state (n NUMBER) IS
       BEGIN
          pkg1.num := n;
       END;
       PROCEDURE print_pkg_state IS
       BEGIN
          DBMS_OUTPUT.PUT_LINE('Num: ' || pkg1.num);
       END;
    END pkg1;
    /

Related Topics

"AUTONOMOUS_TRANSACTION Pragma"
"EXCEPTION_INIT Pragma"
"RESTRICT_REFERENCES Pragma"